<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Redundant code</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Redundant_code"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Redundant_code rootpage-Redundant_code skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Redundant code</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><p>In <a href="Computer_programming" title="Computer programming">computer programming</a>, <b>redundant code</b> is <a href="Source_code" title="Source code">source code</a> or compiled code in a <a href="Computer_program" title="Computer program">computer program</a> that is unnecessary, such as:
</p>
<ul><li>recomputing a value that has previously been calculated<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> and is still available,</li>
<li>code that is never executed (known as <a href="Unreachable_code" title="Unreachable code">unreachable code</a>),</li>
<li>code which is executed but has no external effect (e.g., does not change the output produced by a program; known as <a href="Dead_code" title="Dead code">dead code</a>).</li></ul>
<p>A <a href="NOP_(code)" title="NOP (code)">NOP</a> instruction might be considered to be redundant code that has been explicitly inserted to pad out the <a href="Instruction_(computer_science)" class="mw-redirect" title="Instruction (computer science)">instruction</a> stream or introduce a time delay, for example to create a timing loop by "wasting time". <a href="Identifier" title="Identifier">Identifiers</a> that are declared, but never referenced, are termed <b>redundant declarations</b>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Examples">Examples</h2></div>
<p>The following examples are in <a href="C_(computer_language)" class="mw-redirect" title="C (computer language)">C</a>.
</p>
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span class="kt">int</span><span class="w"> </span><span class="nf">foo</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">iX</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">iY</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">iX</span><span class="o">*</span><span class="mi">2</span><span class="p">;</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">iX</span><span class="o">*</span><span class="mi">2</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<p>The second <code>iX*2</code> expression is redundant code and can be replaced by a reference to the variable <code>iY</code>. Alternatively, the definition <code>int iY = iX*2</code> can instead be removed.
</p><p>Consider:
</p>
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span class="cp">#define min(A,B) ((A)<(B)?(A):(B))</span>
<span class="kt">int</span><span class="w"> </span><span class="nf">shorter_magnitude</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">u1</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">v1</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">u2</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">v2</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="cm">/* Returns the shorter magnitude of (u1,v1) and (u2,v2) */</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">sqrt</span><span class="p">(</span><span class="n">min</span><span class="p">(</span><span class="n">u1</span><span class="o">*</span><span class="n">u1</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">v1</span><span class="o">*</span><span class="n">v1</span><span class="p">,</span><span class="w"> </span><span class="n">u2</span><span class="o">*</span><span class="n">u2</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">v2</span><span class="o">*</span><span class="n">v2</span><span class="p">));</span>
<span class="p">}</span>
</pre></div>
<p>As a consequence of using the <a href="C_preprocessor" title="C preprocessor">C preprocessor</a>, the compiler will only see the expanded form:
</p>
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span class="kt">int</span><span class="w"> </span><span class="nf">shorter_magnitude</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">u1</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">v1</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">u2</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">v2</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">temp</span><span class="p">;</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">u1</span><span class="o">*</span><span class="n">u1</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">v1</span><span class="o">*</span><span class="n">v1</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">u2</span><span class="o">*</span><span class="n">u2</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">v2</span><span class="o">*</span><span class="n">v2</span><span class="p">)</span>
<span class="w"> </span><span class="n">temp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">u1</span><span class="o">*</span><span class="n">u1</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">v1</span><span class="o">*</span><span class="n">v1</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Redundant already calculated for comparison */</span>
<span class="w"> </span><span class="k">else</span>
<span class="w"> </span><span class="n">temp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">u2</span><span class="o">*</span><span class="n">u2</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">v2</span><span class="o">*</span><span class="n">v2</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Redundant already calculated for comparison */</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">sqrt</span><span class="p">(</span><span class="n">temp</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
<p>Because the use of min/max macros is very common, modern compilers are programmed to recognize and eliminate redundancy caused by their use.
</p><p>There is no redundancy, however, in the following code:
</p>
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span class="cp">#define max(A,B) ((A)>(B)?(A):(B))</span>
<span class="kt">int</span><span class="w"> </span><span class="nf">random</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">cutoff</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">range</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">max</span><span class="p">(</span><span class="n">cutoff</span><span class="p">,</span><span class="w"> </span><span class="n">rand</span><span class="p">()</span><span class="o">%</span><span class="n">range</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
<p>If the initial call to rand(), modulo range, is greater than or equal to cutoff, rand() will be called a second time for a second computation of rand()%range, which may result in a value that is actually lower than the cutoff. The max macro thus may not produce the intended behavior for this function.
</p>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<ul><li><a href="Code_bloat" title="Code bloat">Code bloat</a></li>
<li><a href="Code_reuse" title="Code reuse">Code reuse</a></li>
<li><a href="Common_subexpression_elimination" title="Common subexpression elimination">Common subexpression elimination</a></li>
<li><a href="Don't_repeat_yourself" title="Don't repeat yourself">Don't repeat yourself</a></li>
<li><a href="Duplicate_code" title="Duplicate code">Duplicate code</a></li>
<li><a href="Redundancy_(information_theory)" title="Redundancy (information theory)">Redundancy</a></li>
<li><a href="Code_refactoring" title="Code refactoring">Code refactoring</a></li>
<li><a href="Code_smell" title="Code smell">Code smell</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */
.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}
/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://doi.acm.org/10.1145/349214.349233">Debray, S. K., Evans, W., Muth, R., and De Sutter, B. 2000. Compiler techniques for code compaction. ACM Trans. Program. Lang. Syst. 22, 2 (Mar. 2000), 378–415.</a></span>
</li>
</ol></div></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-06-24" href="https://en.wikipedia.org/wiki/?title=Redundant_code&oldid=1297154850">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
</body></html>